console.log('\x1b[31m数组字面量\x1b[0m');
const 咖啡 = ['法式烘焙', '哥伦比亚', '科纳'];
console.log(咖啡);

const 鱼 = ['狮子', ,'天使'];
console.log(鱼);

const 列表 = [, '家', , '学校'];
console.log(列表);

const 新列表 = ['家', , '学校',,,,,];
console.log(新列表);

console.log('\x1b[31m布尔字面量\x1b[0m');
console.log(true);
console.log(false);


console.log('\x1b[31m整数字面量[0m');
console.log(0);
console.log(0b11);
console.log(0o15);
console.log(0x1123);


console.log('\x1b[31m浮点字面量\x1b[0m');
console.log(-3.14);
console.log(.1234);
console.log(3.1E2);
console.log(.1e-2);


console.log('\x1b[31m对象字面量\x1b[0m');
const 销售 = '丰田';
function 类型(名称) {
    return 名称 === '本田' ? 名称 : '对不起, 我们不销扣 $(名称)';
}
const 车 = {
    我的车: '吉利',
    获取车: 类型('本田'),
    特例: 销售
};
console.log(车.我的车);
console.log(车.获取车);
console.log(车.特例);

const 车1 = {
    许多车: {
        a: '萨博',
        b: '吉普',
    },
    7: '马自达',
};
console.log(车1.许多车.b);
console.log(车1[7]);

const 对象 = {
    toString() {
        return 'd' + super.toString();
    },
    ['prop_' + (() => 42)]: 42,
};
console.log(对象.prop_42);
console.log(对象['prop_42']);
console.log(对象['prop_' + (() => 42)]);


console.log('\x1b[31m正则字面量\x1b[0m');
const 正则 = /ab+c/;
console.log(正则);


console.log('\x1b[31m字符串字面量\x1b[0m');
console.log('foo');
console.log("bar");
console.log('1234');
console.log('一行\n另一行');
console.log('Joyo 的猫');


console.log('\x1b[31m模板字面量\x1b[0m');
const 名字 = 'Lev', 时间 = '今天';
console.log(`你好 ${名字}, ${时间} 过得怎么样?`);


console.log('\x1b[31m标签函数\x1b[0m');
const 格式化 = (参数) => {
    if (Array.isArray(参数)) {
        return 参数.map(
            (部分) => `- ${部分}`
        )
        .join('\n');
    }

    if (参数.toString === Object.prototype.toString) {
        return JSON.stringify(参数);
    }

    return 参数;
};

const 打印 = (片断们, ...参数们) => {
    let 消息 = 片断们[0];
    片断们.slice(1).forEach(
        (片断, 索引) => {
            消息 += 格式化(参数们[索引]) + 片断;
        }
    );
    console.log(消息);
};

const 工具们 = ['学习 JavaScript', '派习 Web API', '构建网站', '利润'];
const 进展 = {
    javascript: 20,
    html: 50,
    css: 10,
};

打印 `我需要做:
${工具们}
当前进度为: ${进展}
`;


console.log('\x1b[31m转义\x1b[0m');
const home = 'c:\\temp';
console.log(home);

const str =
  "this string \
is broken \
across multiple \
lines.";
console.log(str); // this string is broken across multiple lines.
